package projekty.kalkulator;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Kalkulator {
    public static void main(String[] args) {
        Ramka MojeOkno;

        MojeOkno = new Ramka(830, 60);
        MojeOkno.setVisible(true);
        MojeOkno.setTitle("Prosty Kalkulator w języku Java");
        MojeOkno.UstawMnieNaSrodku();
        MojeOkno.setResizable(false);
    }
}

class Ramka extends JFrame {
    private Toolkit SrodowiskoGUI;
    private PanelOkna MojPanel;
    private Container KontenerOkna;
    public JButton PrzyciskDodawania;
    public JButton PrzyciskOdejmowania;
    public JButton PrzyciskMnozenia;
    public JButton PrzyciskDzielenia;
    private MojSluchaczDodawania SluchaczPrzyciskuDodawania;
    private MojSluchaczOdejmowania SluchaczPrzyciskuOdejmowania;
    private MojSluchaczMnozenia SluchaczPrzyciskuMnozenia;
    private MojSluchaczDzielenia SluchaczPrzyciskuDzielenia;
    public JTextField PoleTextowe1;
    public JTextField PoleTextowe2;
    public JLabel EtykietaPrzedWynikiem;
    public JLabel EtykietaWynik;
    public JLabel EtykietaX;
    public JLabel EtykietaY;

    public Ramka(int Szerokosc, int Wysokosc) {
        super();

        Dimension WymiarPrzyciskow;
        Dimension Wymiar;
        Dimension WymiarEtykiety1;
        Dimension WymiarEtykiety2;

        MojPanel = new PanelOkna();
        PrzyciskDodawania = new JButton("+");
        PrzyciskOdejmowania = new JButton("-");
        PrzyciskMnozenia = new JButton("*");
        PrzyciskDzielenia = new JButton("/");
        PoleTextowe1 = new JTextField();
        PoleTextowe2 = new JTextField();
        EtykietaPrzedWynikiem = new JLabel("Wynik = ");
        EtykietaWynik = new JLabel("0");
        EtykietaX = new JLabel("X: ");
        EtykietaY = new JLabel("Y: ");


        SrodowiskoGUI = Toolkit.getDefaultToolkit();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setSize(Szerokosc, Wysokosc);
        KontenerOkna = getContentPane();
        KontenerOkna.add(MojPanel);

        Wymiar = new Dimension(140, 20);
        WymiarEtykiety1 = new Dimension(50, 20);
        WymiarEtykiety2 = new Dimension(150, 20);
        WymiarPrzyciskow = new Dimension(50, 20);

        PrzyciskDodawania.setPreferredSize(WymiarPrzyciskow);
        PrzyciskOdejmowania.setPreferredSize(WymiarPrzyciskow);
        PrzyciskMnozenia.setPreferredSize(WymiarPrzyciskow);
        PrzyciskDzielenia.setPreferredSize(WymiarPrzyciskow);
        PoleTextowe1.setPreferredSize(Wymiar);
        PoleTextowe2.setPreferredSize(Wymiar);
        EtykietaPrzedWynikiem.setPreferredSize(WymiarEtykiety1);
        EtykietaWynik.setPreferredSize(WymiarEtykiety2);

        MojPanel.add(EtykietaX);
        MojPanel.add(PoleTextowe1);
        MojPanel.add(EtykietaY);
        MojPanel.add(PoleTextowe2);
        MojPanel.add(PrzyciskDodawania);
        MojPanel.add(PrzyciskOdejmowania);
        MojPanel.add(PrzyciskMnozenia);
        MojPanel.add(PrzyciskDzielenia);
        MojPanel.add(EtykietaPrzedWynikiem);
        MojPanel.add(EtykietaWynik);

        SluchaczPrzyciskuDodawania = new MojSluchaczDodawania(this);
        PrzyciskDodawania.addActionListener(SluchaczPrzyciskuDodawania);
        SluchaczPrzyciskuOdejmowania = new MojSluchaczOdejmowania(this);
        PrzyciskOdejmowania.addActionListener(SluchaczPrzyciskuOdejmowania);
        SluchaczPrzyciskuMnozenia = new MojSluchaczMnozenia(this);
        PrzyciskMnozenia.addActionListener(SluchaczPrzyciskuMnozenia);
        SluchaczPrzyciskuDzielenia = new MojSluchaczDzielenia(this);
        PrzyciskDzielenia.addActionListener(SluchaczPrzyciskuDzielenia);

    }

    public void UstawMnieNaSrodku() {
        Dimension RozmiarEkranu;
        int PozycjaX;
        int PozycjaY;

        int SzerokoscOkna;
        int WysokoscOkna;

        SrodowiskoGUI = Toolkit.getDefaultToolkit();

        RozmiarEkranu = SrodowiskoGUI.getScreenSize();

        PozycjaX = 0;
        PozycjaY = 0;

        SzerokoscOkna = this.getSize().width;
        WysokoscOkna = this.getSize().height;

        PozycjaX = (RozmiarEkranu.width - SzerokoscOkna) / 2;
        PozycjaY = (RozmiarEkranu.height - WysokoscOkna) / 2;

        this.setLocation(PozycjaX, PozycjaY);
    }
}

class PanelOkna extends JPanel {
    @Override
    public void paintComponent(Graphics NaTymRysujemy) {
    }
}

class MojSluchaczDodawania implements ActionListener {
    private Ramka MojeOkno;

    public MojSluchaczDodawania(Ramka Okno) {
        MojeOkno = Okno;
    }

    @Override
    public void actionPerformed(ActionEvent Zdarzenie) {

        String TekstZPolaTekstowego1;
        String TekstZPolaTekstowego2;
        double Liczba1;
        double Liczba2;
        double Wynik;
        String PoKonwersji;

        TekstZPolaTekstowego1 = "";
        TekstZPolaTekstowego2 = "";
        Liczba1 = 0;
        Liczba2 = 0;
        Wynik = 0;
        PoKonwersji = "";

        TekstZPolaTekstowego1 = MojeOkno.PoleTextowe1.getText();
        TekstZPolaTekstowego2 = MojeOkno.PoleTextowe2.getText();

        try {
            Liczba1 = Double.valueOf(TekstZPolaTekstowego1);
            Liczba2 = Double.valueOf(TekstZPolaTekstowego2);
            Wynik = Liczba1 + Liczba2;
        } catch (NumberFormatException Wyjatek) {
            JOptionPane.showMessageDialog(MojeOkno, "Wystąpił błąd!\nWpisz poprawne liczby do pół tekstowych.", "Komunikat", JOptionPane.ERROR_MESSAGE);
        }

        PoKonwersji += Wynik;

        MojeOkno.EtykietaWynik.setText(PoKonwersji);
        MojeOkno.repaint();
    }
}

class MojSluchaczOdejmowania implements ActionListener {
    private Ramka MojeOkno;

    public MojSluchaczOdejmowania(Ramka Okno) {
        MojeOkno = Okno;
    }

    @Override
    public void actionPerformed(ActionEvent Zdarzenie) {

        String TekstZPolaTekstowego1;
        String TekstZPolaTekstowego2;
        double Liczba1;
        double Liczba2;
        double Wynik;
        String PoKonwersji;

        TekstZPolaTekstowego1 = "";
        TekstZPolaTekstowego2 = "";
        Liczba1 = 0;
        Liczba2 = 0;
        Wynik = 0;
        PoKonwersji = "";

        TekstZPolaTekstowego1 = MojeOkno.PoleTextowe1.getText();
        TekstZPolaTekstowego2 = MojeOkno.PoleTextowe2.getText();

        try {
            Liczba1 = Double.valueOf(TekstZPolaTekstowego1);
            Liczba2 = Double.valueOf(TekstZPolaTekstowego2);
            Wynik = Liczba1 - Liczba2;
        } catch (NumberFormatException Wyjatek) {
            JOptionPane.showMessageDialog(MojeOkno, "Wystąpił błąd!\nWpisz poprawne liczby do pół tekstowych.", "Komunikat", JOptionPane.ERROR_MESSAGE);
        }

        PoKonwersji += Wynik;

        MojeOkno.EtykietaWynik.setText(PoKonwersji);
        MojeOkno.repaint();
    }
}


class MojSluchaczMnozenia implements ActionListener {
    private Ramka MojeOkno;

    public MojSluchaczMnozenia(Ramka Okno) {
        MojeOkno = Okno;
    }

    @Override
    public void actionPerformed(ActionEvent Zdarzenie) {

        String TekstZPolaTekstowego1;
        String TekstZPolaTekstowego2;
        double Liczba1;
        double Liczba2;
        double Wynik;
        String PoKonwersji;

        TekstZPolaTekstowego1 = "";
        TekstZPolaTekstowego2 = "";
        Liczba1 = 0;
        Liczba2 = 0;
        Wynik = 0;
        PoKonwersji = "";

        TekstZPolaTekstowego1 = MojeOkno.PoleTextowe1.getText();
        TekstZPolaTekstowego2 = MojeOkno.PoleTextowe2.getText();

        try {
            Liczba1 = Double.valueOf(TekstZPolaTekstowego1);
            Liczba2 = Double.valueOf(TekstZPolaTekstowego2);
            Wynik = Liczba1 * Liczba2;
        } catch (NumberFormatException Wyjatek) {
            JOptionPane.showMessageDialog(MojeOkno, "Wystąpił błąd!\nWpisz poprawne liczby do pół tekstowych.", "Komunikat", JOptionPane.ERROR_MESSAGE);
        }

        PoKonwersji += Wynik;

        MojeOkno.EtykietaWynik.setText(PoKonwersji);
        MojeOkno.repaint();
    }
}


class MojSluchaczDzielenia implements ActionListener {
    private Ramka MojeOkno;

    public MojSluchaczDzielenia(Ramka Okno) {
        MojeOkno = Okno;
    }

    @Override
    public void actionPerformed(ActionEvent Zdarzenie) {

        String TekstZPolaTekstowego1;
        String TekstZPolaTekstowego2;
        double Liczba1;
        double Liczba2;
        double Wynik;
        String PoKonwersji;

        TekstZPolaTekstowego1 = "";
        TekstZPolaTekstowego2 = "";
        Liczba1 = 0;
        Liczba2 = 0;
        Wynik = 0;
        PoKonwersji = "";

        TekstZPolaTekstowego1 = MojeOkno.PoleTextowe1.getText();
        TekstZPolaTekstowego2 = MojeOkno.PoleTextowe2.getText();

        try {
            Liczba1 = Double.valueOf(TekstZPolaTekstowego1);
            Liczba2 = Double.valueOf(TekstZPolaTekstowego2);
            Wynik = Liczba1 / Liczba2;
        } catch (NumberFormatException Wyjatek) {
            JOptionPane.showMessageDialog(MojeOkno, "Wystąpił błąd!\nWpisz poprawne liczby do pół tekstowych.", "Komunikat", JOptionPane.ERROR_MESSAGE);
        }

        PoKonwersji += Wynik;

        MojeOkno.EtykietaWynik.setText(PoKonwersji);
        MojeOkno.repaint();
    }
}